package cn.com.gridinfo.sooc.core.login.activity;

import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.provider.Settings;
import android.telephony.TelephonyManager;
import android.view.KeyEvent;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.jeremy.arad.utils.AnimUtil;
import com.jeremy.arad.utils.Log;
import com.jeremy.arad.utils.StringUtils;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import butterknife.ButterKnife;
import butterknife.InjectView;
import butterknife.OnClick;
import butterknife.OnTextChanged;
import cn.com.gridinfo.sooc.R;
import cn.com.gridinfo.sooc.base.BaseSoocActivity;
import cn.com.gridinfo.sooc.core.login.common.CodeConst;
import cn.com.gridinfo.sooc.core.login.dao.RegsiterDao;
import cn.com.gridinfo.sooc.utils.MessageUtils;
import cn.com.gridinfo.sooc.utils.widget.ClearEditText;

/**
 * 注册页面
 *
 * @author yingchunli
 */
public class RegisterActivity extends BaseSoocActivity {

    String type = "";//何种身份，学生：student，老师:teacher，体验：tiyan
    @InjectView(R.id.toolbar_righttv)
    TextView toolbarRihtTv;//toolbar右侧文字
    @InjectView(R.id.tel_text)
    ClearEditText telText;//手机号码
    @InjectView(R.id.pwd_text)
    ClearEditText pwdText;//密码
    @InjectView(R.id.yanzhengma_text)
    ClearEditText yanzhengmaText;//验证码
    @InjectView(R.id.yanzhengma_btn)
    Button yanzhengmaBtn;//获取验证码
    @InjectView(R.id.ID_text)
    ClearEditText IDText;//身份证号码
    @InjectView(R.id.ID_lay)
    LinearLayout IDLay;//身份证号码区域
    @InjectView(R.id.realName_text)
    ClearEditText realNameText;//真实姓名
    @InjectView(R.id.realName_lay)
    LinearLayout realNameLay;//真实姓名区域
    @InjectView(R.id.nickName_text)
    ClearEditText nichengText;//昵称
    @InjectView(R.id.nickName_lay)
    LinearLayout nickNameLay;//昵称区域
    @InjectView(R.id.invite_text)
    ClearEditText inviteText;//邀请码
    @InjectView(R.id.register_btn)
    Button regBtn;//注册按钮

    //身份证格式
    private String userCard15 = "^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$";
    private String userCard = "^(\\d{6})(18|19|20)?(\\d{2})([01]\\d)([0123]\\d)(\\d{3})(\\d|X|x)?$";
    private String title = "注册";
    private static final int INTENT_REALNAME = 1;//intent请求码

    private String schoolName = "";//节点名称
    private String schoolUrl = "";//节点地址
    private String imei = "";//硬件标识码,用于发送验证码和注册
    RegsiterDao dao;
    private Map<String, String> key_values = new HashMap<>();

    boolean isChonxinSend = false;//发送验证码是否处于重新发送中,如果不处于重新发送则改变


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        ButterKnife.inject(this);
        dao = new RegsiterDao(this);
        schoolName = dao.getServerName();//获取节点
        schoolUrl = dao.getServerName();//获取节点地址
        Log.d("schoolName" + schoolName);
        Log.d("schoolUrl" + schoolUrl);
        initView();
        getImei();//获取设备标识
        //验证手机号
//        telText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
//            @Override
//            public void onFocusChange(View v, boolean hasFocus) {
//                if (!hasFocus) {
//                    String cellphone = telText.getText().toString().trim();
//                    initThread("email", cellphone + "@" + cellphone.substring(0, 3) + ".com");
//                }
//            }
//        });
        //验证身份证号码
        IDText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if (!hasFocus) {
                    String sfzhm = IDText.getText().toString().trim();
                    if (!StringUtils.isNull(sfzhm)) {
                        //身份证号不为空，验证身份证号，验证成功之后，如果真实姓名不为空，需要再验证真实姓名和身份证号是否匹配
//                        initThread("sfzjh", sfzhm);
                        if (!sfzhm.matches(userCard) && !sfzhm.matches(userCard15)) {
                            MessageUtils.showImageShortToast(RegisterActivity.this, "身份证格式不正确！");
                        } else {
                            key_values.put("sfzjh", sfzhm);
                            judgeInfo(key_values);
                        }

                    }
                }
            }
        });
        realNameText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if (!hasFocus) {
                    String realname = realNameText.getText().toString().trim();
                    String sfzhm = IDText.getText().toString().trim();
                    if (!StringUtils.isNull(realname) && !StringUtils.isNull(sfzhm)) {
                        //验证真实姓名和身份证号是否匹配
                        key_values.put("sfzjh", sfzhm);
                        key_values.put("xm", realname);
                        judgeInfo(key_values);
                    }
                }
            }
        });


        //按键完成监听
        inviteText.setImeOptions(EditorInfo.IME_ACTION_DONE);
        inviteText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            public boolean onEditorAction(TextView v, int actionId,
                                          KeyEvent event) {
                if (actionId == EditorInfo.IME_ACTION_DONE) {
                    if (validateTiYanNotNull()) {
                        onRegClick();
                    }
                }
                return false;
            }
        });
    }

    @Override
    protected void onStart() {
        super.onStart();
//        initView();//初始化界面数据
    }

    /**
     * 获取imei数据
     */
    void getImei() {
        //若为平板无法获取imei   则获取设备id号。
        try {
            TelephonyManager telephonyManager = (TelephonyManager) this.getSystemService(TELEPHONY_SERVICE);
            imei = telephonyManager.getDeviceId();
        } catch (SecurityException e) {
            e.printStackTrace();
        } finally {
            if (imei == null || "".equals(imei)) {
                imei = Settings.Secure.getString(this.getContentResolver(), Settings.Secure.ANDROID_ID);
            }
        }
    }

    //设置标题
    @Override
    public String setupToolBarTitle() {
        return title;
    }

    @Override
    public boolean setupToolBarLeftButton(ImageView leftButton) {
        return true;
    }


    //ToolBar的back键
    @OnClick(R.id.toolbar_leftbtn)
    void onToolbarLeftClick() {
        finish();
    }

    //头部右侧按钮点击
    @OnClick(R.id.toolbar_righttv)
    void onToolbarRightClick() {
        //跳转到实名认证页面
        Intent intent = new Intent(this, RealnameRegActivity.class);
        startActivity(intent);
        AnimUtil.intentSlidIn(this);
    }

    /**
     * ToolBar的右侧文字的显示
     *
     * @return
     */
    @Override
    public boolean setToolbarRighttv(TextView toolbarRighttv) {
        Intent i = getIntent();
        if (i.hasExtra("type")) {
            return false;
        }

        return true;
    }

    /**
     * 初始化界面数据
     */
    private void initView() {
        //判段从哪个页面进入的
        toolbarRihtTv.setText("实名");
        Intent i = getIntent();
        if (i.hasExtra("type")) {
            type = getIntent().getStringExtra("type");
            toolbarRihtTv.setVisibility(View.GONE);//不显示toolbar右侧的文字
        } else {
            if (i.hasExtra("select")) {
                type = "reg";
            } else {
                type = "tiyan";
            }
        }
        //判断什么身份进入
        //游客身份、体验账号进入
        Log.d("type" + type);
        if (type.equals("tiyan")) {
            nickNameLay.setVisibility(View.VISIBLE);
            IDLay.setVisibility(View.GONE);//隐藏身份证区域
            realNameLay.setVisibility(View.GONE);//隐藏真实姓名区域
            title = "体验注册";
        } else if (type.equals("reg")) {
            //注册
            nickNameLay.setVisibility(View.VISIBLE);
            IDLay.setVisibility(View.GONE);//隐藏身份证区域
            realNameLay.setVisibility(View.GONE);//隐藏真实姓名区域
            title = "注册";
        } else {
            //老师、学生身份进入
            nickNameLay.setVisibility(View.GONE);//隐藏昵称区域
            IDLay.setVisibility(View.VISIBLE);
            realNameLay.setVisibility(View.VISIBLE);
            title = "实名注册";
        }
        yanzhengmaBtn.setEnabled(false);
        regBtn.setEnabled(false);
    }

    /**
     * 注册按钮的点击
     */
    @OnClick(R.id.register_btn)
    void onRegClick() {

        if (!judge()) {
            //内容填写不正确
            return;
        }
        String cellphone = telText.getText().toString().trim();
        String pwd = pwdText.getText().toString().trim();
        String mobile_code = yanzhengmaText.getText().toString().trim();
        String username = nichengText.getText().toString().trim();
        String invite = inviteText.getText().toString().trim();
        Log.d("cellphone->" + cellphone);
        Log.d("pwd->" + pwd);
        Log.d("mobile_code->" + mobile_code);
        Log.d("username->" + username);
        Log.d("invite->" + invite);
        Log.d("imei->" + imei);
        if (type.equals("tiyan") || type.equals("reg")) {
            //游客身份
            dao.regsiter(5, cellphone, pwd, mobile_code, username, null, null, invite, imei, CodeConst.REGSITER);
        } else {
            String name = realNameText.getText().toString().trim();
            String sfzhm = IDText.getText().toString().trim();
            Log.d("xm->" + name);
            Log.d("sfzhm->" + sfzhm);
            if (type.equals("student")) {
                //学生身份
                dao.regsiter(3, cellphone, pwd, mobile_code, null, name, sfzhm, invite, imei, CodeConst.REGSITER);
            } else {
                //老师身份
                dao.regsiter(2, cellphone, pwd, mobile_code, null, name, sfzhm, invite, imei, CodeConst.REGSITER);
            }
        }
        regBtn.setText("注册中");
        regBtn.setEnabled(false);
    }

    /**
     * 判断填写内容是否可以注册
     *
     * @return true:内容填写正确   false:内容填写错误
     */
    private boolean judge() {

        Log.d("phone" + telText.toString());
        Log.d("pwd" + pwdText.toString());
        //验证手机号格式是否正确
        if (!StringUtils.isPhoneFormat(telText.getText().toString().trim())) {
            MessageUtils.showImageShortToast(this, "手机号（或密码）格式不正确");
            return false;
        } else if (pwdText.getText().toString().trim().contains(" ") || pwdText.getText().toString().trim().length() < 6
                || pwdText.getText().toString().trim().length() > 20) {
            //密码 6-20位数字或字母组合，不含空格和特殊字符
            MessageUtils.showImageShortToast(this, "手机号（或密码）格式不正确");
            return false;
        }

        //学生，老师身份注册时
        if (type.equals("sutdent") || type.equals("teacher")) {
            if (StringUtils.isNull(IDText.getText().toString().trim())) {
                MessageUtils.showImageShortToast(this, "请输入身份证号码");
                return false;
            } else if (!IDText.getText().toString().trim().matches(userCard) && !IDText.getText().toString().trim().matches(userCard15)) {
                MessageUtils.showImageShortToast(this, "身份证号格式不正确");
                return false;
            }
        } else {
            //体验用户注册时，
            String nickname = nichengText.getText().toString().trim();
            if (!StringUtils.isNull(nickname)) {
                String reg = "^[\\u00b7-\\uFFFF\\x20-\\x7f]+$";
                if (!nickname.matches(reg)) {
                    MessageUtils.showImageShortToast(this, "昵称中存在非法字符");
                    return false;
                }
            }
        }
//        if (!inviteText.getText().toString().trim().equals("")) {
        //邀请码不为空时，只能是数字，邀请码必须大于1
//            if (Integer.parseInt(inviteText.getText().toString().trim()) < 1) {
//                MessageUtils.showImageShortToast(this, "邀请码格式不正确");
//                return false;
//            }
//        }
        return true;
    }

    /**
     * 获取验证码的点击
     */
    @OnClick(R.id.yanzhengma_btn)
    void onSendYanzhengmaClick() {
        //验证账号格式为手机号
        if (!StringUtils.isPhoneFormat(telText.getText().toString().trim())) {
            MessageUtils.showImageShortToast(this, "手机号（或密码）格式不正确");
        } else {
            //发送验证码
            Log.d("cellphone->" + telText.getText().toString().trim());
            Log.d("imei->" + imei);
            dao.getYanzhengma(telText.getText().toString().trim(), "2",
                    Build.VERSION.RELEASE, Build.MODEL, imei, CodeConst.GET_YANZHENGMA);
//            timer.start();//发送验证码倒计时
            yanzhengmaBtn.setEnabled(false);
            yanzhengmaBtn.setClickable(false);
            yanzhengmaBtn.setTextColor(getResources().getColor(R.color.color_b7));
        }
    }

    //验证码倒计时
    private CountDownTimer timer = new CountDownTimer(60000, 1000) {

        @Override
        public void onTick(long millisUntilFinished) {
            isChonxinSend = true;
            yanzhengmaBtn.setEnabled(false);
            yanzhengmaBtn.setClickable(false);
            yanzhengmaBtn.setTextColor(getResources().getColor(R.color.color_b7));
            yanzhengmaBtn.setText("重新发送" + (millisUntilFinished / 1000) + "s");
        }

        @Override
        public void onFinish() {
            isChonxinSend = false;
            yanzhengmaBtn.setEnabled(true);
            yanzhengmaBtn.setClickable(true);
            yanzhengmaBtn.setText("重新发送");
            yanzhengmaBtn.setTextColor(getResources().getColor(R.color.white));
        }
    };
//

    /**
     * 验证手机号是否为11,位，验证码是否处于可点状态
     */
    @OnTextChanged(value = {R.id.tel_text}, callback = OnTextChanged.Callback.AFTER_TEXT_CHANGED)
    void onAfterTextChanged1() {
        if (telText.getText().toString().length() != 11) {
            yanzhengmaBtn.setEnabled(false);
        } else {
            if (!isChonxinSend) {
                yanzhengmaBtn.setEnabled(true);
                yanzhengmaBtn.setTextColor(getResources().getColor(R.color.white));
            }
        }
    }

    /**
     * 判断必填内容是否为空，确定注册按钮处于什么状态
     * 当必填内容全不为空时，注册按钮才处于可点击状态，否则，不可点击
     */
    @OnTextChanged(value = {R.id.pwd_text, R.id.yanzhengma_text, R.id.ID_text, R.id.realName_text, R.id.nickName_text},
            callback = OnTextChanged.Callback.AFTER_TEXT_CHANGED)
    void onAfterTextChanged() {
        if (type.equals("tiyan") || type.equals("reg")) {
            //游客注册时,或者快速注册时
            if (telText.getText().toString().equals("") || pwdText.getText().toString().equals("")
                    || yanzhengmaText.getText().toString().equals("") || nichengText.getText().toString().trim().equals("")) {
                regBtn.setEnabled(false);
            } else {
                regBtn.setEnabled(true);
            }
        } else {
            //老师，学生注册时
            if (telText.getText().toString().equals("") || pwdText.getText().toString().equals("")
                    || yanzhengmaText.getText().toString().equals("") || IDText.getText().toString().equals("")
                    || realNameText.getText().toString().equals("")) {
                regBtn.setEnabled(false);
            } else {
                regBtn.setEnabled(true);
            }
        }
    }

    //游客不为空验证
    boolean validateTiYanNotNull() {

        //电话为空
        if (StringUtils.isNull(telText.getText().toString().trim())) {
            telText.requestFocus();
            return false;
        }
        //密码为空
        if (StringUtils.isNull(pwdText.getText().toString().trim())) {
            pwdText.requestFocus();
            return false;
        }
        //验证码为空
        if (StringUtils.isNull(yanzhengmaText.getText().toString().trim())) {
            yanzhengmaText.requestFocus();
            return false;
        }
        //老师  学生 身份
        if (type.equals("sutdent") || type.equals("teacher")) {
            //身份证
            if (StringUtils.isNull(IDText.getText().toString().trim())) {
                IDText.requestFocus();
                return false;
            }
            //姓名
            if (StringUtils.isNull(realNameText.getText().toString().trim())) {
                realNameText.requestFocus();
                return false;
            }
        } else {

            //体验注册  快速注册

            //昵称为空
            if (StringUtils.isNull(nichengText.getText().toString().trim())) {
                nichengText.requestFocus();
                return false;
            }
        }
        return true;
    }

    @Override
    public void onRequestSuccess(int requestCode) {
        try {
            switch (requestCode) {
                case CodeConst.GET_YANZHENGMA://获取验证码
                    if (dao.getStatus().equals("0")) {
                        timer.start();//发送验证码倒计时
                        MessageUtils.showRightImageShortToast(this, "验证码已发送");
                    } else {
                        yanzhengmaBtn.setEnabled(true);
                        yanzhengmaBtn.setClickable(true);
                        yanzhengmaBtn.setTextColor(getResources().getColor(R.color.white));
                        MessageUtils.showImageShortToast(this, dao.getStatusCode());
                    }
                    break;
                case CodeConst.REGSITER://注册成功
                    if (dao.getStatus().equals("0")) {
                        MessageUtils.showRightImageShortToast(this, "注册成功！");
                        Intent intent = new Intent();
                        intent.setClass(this, LoginActivity.class);
                        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//它可以关掉所要到的界面中间的activity
                        startActivity(intent);
                        finish();
                    } else {
                        if (dao.getStatusCode().equals("用户邮箱已经注册请重新输入！")) {
                            MessageUtils.showImageShortToast(this, "账号已经注册请重新输入！");
                        } else {
                            MessageUtils.showImageShortToast(this, dao.getStatusCode());
                        }
                    }
                    regBtn.setText("注册");
                    regBtn.setEnabled(true);
                    break;
                case CodeConst.JUDGE://验证身份证，姓名
                    if (!dao.getStatus().equals("0")) {
                        //不成功，提示信息为：用户信息输入错误或后台系统没有该用户信息
//                    MessageUtils.showImageShortToast(this, "用户信息输入错误或后台系统没有该用户信息");
                        MessageUtils.showImageShortToast(this, dao.getStatusCode());
                    } else {
                        //身份证验证通过，如果真实姓名不为空，继续验证二者是否匹配
                        if (!StringUtils.isNull(realNameText.getText().toString().trim())) {
                            key_values.put("xm", realNameText.getText().toString().trim());
                            judgeInfo(key_values);
                        }
                    }
                    break;
                case CodeConst.MATCH_INFO://验证身份证和姓名
                    if (!dao.getStatus().equals("0")) {
                        //不成功，提示信息为：用户信息输入错误或后台系统没有该用户信息
//                    MessageUtils.showImageShortToast(this, "用户信息输入错误或后台系统没有该用户信息");
                        MessageUtils.showImageShortToast(this, dao.getStatusCode());
                    }
                    break;
            }
        } catch (Exception e) {
            MessageUtils.showImageShortToast(this, "数据请求异常");
        }
    }

    /**
     * 对表单进行单项验证(动态验证控件内容)
     *
     * @param key   验证的项目名
     * @param value 验证的项目的值
     */
    void initThread(String key, String value) {
        Log.d("要验证的信息：key=" + key);
        Log.d("身份证号码：value=" + value);
        if (!value.equals("")) {
            if (!value.matches(userCard) && !value.matches(userCard15)) {
                MessageUtils.showImageShortToast(this, "身份证格式不正确！");
            } else {
                if (type.equals("student")) {
                    dao.judge(3, key, value, CodeConst.JUDGE);
                } else if (type.equals("teacher")) {
                    dao.judge(2, key, value, CodeConst.JUDGE);
                } else {
                    dao.judge(5, key, value, CodeConst.JUDGE);
                }
            }
        }
    }

    private void judgeInfo(Map<String, String> map) {
        // sfzjh,xm
        //MATCH_INFO 信息是否匹配    JUDGE验证身份证号是否存在
        int requestCode = 0;
        if (map.size() == 1) {
            //只验证身份证
            requestCode = CodeConst.JUDGE;
        } else {
            //验证身份证和姓名是否匹配
            requestCode = CodeConst.MATCH_INFO;
        }
        if (type.equals("student")) {
            map.put("identitytype", "3");
        } else if (type.equals("teacher")) {
            map.put("identitytype", "2");
        }
        dao.judgeInfo(map, requestCode);
    }
}
